﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; // Bruges for at kunne bestemme CommandType
using System.Data.SqlClient; // Bruger SQL clienten.
using System.Data.SqlTypes; // Bruges til at bruge scripted typer, idet det skal bruges parametere.

using Model;

namespace Controller
{
    public class DBFacade
    {
        
        /********** ATTRIBUTES **********/
        private SqlConnection dbCon;
        private SqlCommand dbCommand;
        private SqlDataReader dataReader = null;
        string connectionstring;

        /********** CONSTRUCTOR **********/
        # region CONSTRUCTOR
       
        public DBFacade()
        {
            // Denne følgende linie, fortæller adressen på databasen, hvilken catalog der skal bruges og hvilken login tingi der skal bruges.
            connectionstring = @"Data Source=ealdb1.eal.local;Initial Catalog=EJL01_DB;Persist Security Info=True;User ID=ejl01_usr;Password=***********";


            // Connection objekt.
            dbCon = new SqlConnection(connectionstring); // Definere vores SQL connection.

            // Command Objekt
            dbCommand = new SqlCommand();
            dbCommand.CommandType = CommandType.StoredProcedure;
            dbCommand.Connection = dbCon;
        }

        # endregion // Endregion CONSTRUCTOR    
        
        
        # region Metoder

        public int CreateKontaktInfo(int postNr, string vejNavn, string vejNr, string telefonNr, string email)
        {
            int KontaktInfoId;
            SqlParameter par;
            dbCommand.CommandText = "SP_Create";
            dbCommand.CommandType = CommandType.StoredProcedure; //  For at kunne køre stored procedures.      
            dbCommand.Parameters.Clear();

            // Parameter 1.
            par = new SqlParameter("@KId", SqlDbType.Int);
            par.Direction = ParameterDirection.Output; // fortæller der kommer en retur type.
            dbCommand.Parameters.Add(par);

            // Parameter 2
            par = new SqlParameter("@postNr", SqlDbType.NVarChar);
            par.Value = postNr;
            dbCommand.Parameters.Add(par);

            // Parameter 3
            par = new SqlParameter("@vejNavn", SqlDbType.NVarChar);
            par.Value = vejNavn;
            dbCommand.Parameters.Add(par);

            // Parameter 4
            par = new SqlParameter("@vejNr", SqlDbType.NVarChar);
            par.Value = vejNr;
            dbCommand.Parameters.Add(par);

            // Parameter 5
            par = new SqlParameter("@telefonNr", SqlDbType.NVarChar);
            par.Value = telefonNr;
            dbCommand.Parameters.Add(par);

            // Parameter 5
            par = new SqlParameter("@email", SqlDbType.NVarChar);
            par.Value = email;
            dbCommand.Parameters.Add(par);

            try
            {
                dbCon.Open();
                dbCommand.ExecuteNonQuery();
                KontaktInfoId = (int)dbCommand.Parameters["@KontaktId"].Value;
            }
            catch (Exception e)
            {
                throw new SystemException(e.ToString());
            }
            finally
            {
                if (dbCon != null)
                {
                    dbCon.Close();
                }
            }
            return KontaktInfoId;
        }

        #endregion // Endregion Metoder

    }
}
